package com.xzcedu.writer_;

import java.io.FileWriter;
import java.io.IOException;

/**
 * @author 徐州城
 * @version 1.0
 * 使用FileWriter 将"风雨之后，定见彩虹" 写入到note.txt 文件中，注意细节
 */
public class FileWriter_ {
    public static void main(String[] args) {
        //思路分析
        //1. 先创建FileWriter对象 并指定 输出的位置
        //2. 输出之后必须关闭FileWriter或者flush 否则写入不到指定的位置
        //3. 创建FileWriter对象时 确定是覆盖模式，还是追加模式
        String filePath = "e:\\note.txt";

        FileWriter fileWriter = null;
        char[] chars = {'1', '2', '3'};

        try {
            fileWriter = new FileWriter(filePath, true);//追加模式
            //write(int): 写入单个字符
            fileWriter.write('Q');
            //write(char[]): 写入指定数组
            fileWriter.write(new String(chars).toCharArray());
            //write(char[],off,len): 写入指定数组的指定部分
            fileWriter.write("韩顺平YYyDS".toCharArray(), 0, 3);
            //write(string): 写入整个字符串
            fileWriter.write("风雨之后，定见彩虹");
            //write(String,off,len): 写入字符串的指定部分
            fileWriter.write("深圳上海", 0, 2);
            //数量大的情况下，可以使用循环操作。


        } catch (IOException e) {
            e.printStackTrace();

        } finally {

            if (fileWriter != null) {
                //对应FileWriter，一定要关闭流，或者flush 才能真正的把数据写入到文件
                //看源码就知道原因.
                /*
                private void writeBytes() throws IOException {
                    this.bb.flip();
                    int var1 = this.bb.limit();
                    int var2 = this.bb.position();

                    assert var2 <= var1;

                    int var3 = var2 <= var1 ? var1 - var2 : 0;
                    if (var3 > 0) {
                        if (this.ch != null) {
                            assert this.ch.write(this.bb) == var3 : var3;
                        } else {
                            this.out.write(this.bb.array(), this.bb.arrayOffset() + var2, var3);
                        }
                    }

                this.bb.clear();
            }
                 */
                try {
                    //fileWriter.flush();
                    //关闭文件流，等价 flush() + 关闭
                    fileWriter.close();
                    System.out.println("关闭成功...");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
